/*
 * @Author: HeAo
 * @Date: 2022-08-18 19:49:22
 * @LastEditTime: 2022-08-19 16:56:26
 * @LastEditors: HeAo
 * @Description: 
 * @FilePath: \JavaScripe\day-09\05-更简单的原型模型.js
 * 别乱动！
 */
/*
目的:让原型模式看起来更简单
*/
function Person() {}
// 字面量
// var a={} 所以指向object 
// 因此Person.prototype={} 所以它指向的也是object
Person.prototype = {
  // constructor: Person, //这种方式虽然解决了指向问题,但是在for-in中会将它列出来,也会造成误修改 所以执行2
  name: 'zhangsan',
  age: 29,
  sayName() {
    console.log(this.name);
  }
}
// // 2.恢复constructor属性 使用Object.defineProperty修改
// Object.defineProperty(Person.prototype, 'constructor', {
//   enumerable: false,
//   value: Person
// })

var p1 = new Person()
console.log(p1.name); //因为我们直接给Person.prototype赋值 所以它能找到
// 查看它指向哪个构造函数
console.log(p1.constructor === Person); //false 修改constructor之后:true
console.log(p1.constructor === Object); //true  修改constructor之后:false

/*
产生新问题: constructor的指向不再指向Person对象 
原因:因为我们采用字面量完全重写了prototype对象
*/
// 解决方式:手动改变constructor指向 1.

// 新问题2:原型也不是完美的 